#! /usr/bin/python3
# -*- coding: UTF-8 -*-
"""
  作者: 小肥爬爬
  简书: https://www.jianshu.com/u/db796a501972
  gitee: https://gitee.com/xiaofeipapa/python-toolkit
  您可以自由转载此博客文章, 恳请保留原链接, 谢谢!
"""
from fabric import Connection


def do_it():

    host = '192.168.0.12'
    user = 'root'
    password = 'test'

    # ssh 连接的正确姿势
    conn = Connection(host=host, user=user, connect_kwargs={'password': password})

    # 在远程机器运行命令(用run方法), 并获得返回结果
    # hide 表示隐藏远程机器在控制台的输出, 达到静默的效果
    # 默认 warn是False, 如果远程机器运行命令出错, 那么本地会抛出异常堆栈. 设为True 则不显示这堆栈.
    cmd = 'ls /tmp'
    result = conn.run(cmd, hide=True, warn=True, encoding='utf-8')

    # 正常运行时, 信息在 stdout里
    print('-------- 下面是 stdout 信息')
    print(result.stdout.strip())

    # 出错时, 信息在 stderr 里
    print('-------- 下面是 stderr 信息')
    print(result.stderr.strip())

    # 来一个出错的例子, tmp/xiaofeipapa 目录不存在
    cmd = 'ls /tmp/xiaofeipapa'
    result = conn.run(cmd, hide=True, warn=True, encoding='utf-8')
    print('-------- 下面是 stdout 信息')
    print(result.stdout.strip())

    print('-------- 下面是 stderr 信息')
    print(result.stderr.strip())


if __name__ == '__main__':
    do_it()

